home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / pars.arc / PARS.C < prev    next >
C/C++ Source or Header  |  1987-12-03  |  3KB  |  96 lines

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. extern char *uargv[20];  /* max number of arguments */
  7. extern int uargc;
  8. char bstring[160], line[80]; /* a single arg wouldn't exceed 80, would it? */
  9. int i, j, w;
  10.  
  11.  
  12. pars(xargc,xargv)
  13. int xargc;
  14. char *xargv[];
  15. {
  16.      strcpy(bstring,xargv[0]);   /* calling program name */
  17.      for (i = 1; i < xargc; i++)
  18.      { if (i < xargc)
  19.          strcat(bstring," ");
  20.        if (strchr(xargv[i],' ')) /* if contains space, a quoted string */
  21.        {  strcat(bstring,"\"");
  22.           strcat(bstring,xargv[i]);
  23.           strcat(bstring,"\"");
  24.        }
  25.        else
  26.          strcat(bstring,xargv[i]);
  27.      }
  28.      j = w = 0;
  29.      for (i = 0; i <= strlen(bstring); i++)
  30.        switch (tolower(bstring[i]))
  31.        {
  32.           case ' ':                     /* space, comma, semicolon */
  33.           case ',':
  34.           case ';':
  35.             movarg();
  36.             if (bstring[i+1] == ' ')    /* , or ; followed by space */
  37.                i++;
  38.             break;
  39.  
  40.           case '\"':                    /* quoted string */
  41.             i++;
  42.             while (bstring[i] != '\"')
  43.                line[w++] = bstring[i++];
  44.             movarg();
  45.             if (bstring[i+1] == ' ')
  46.                i++;                     /* move past trailing space */
  47.             break;
  48.  
  49.           case '\'':                    /* quoted string */
  50.             i++;
  51.             while (bstring[i] != '\'')
  52.                line[w++] = bstring[i++];
  53.             movarg();
  54.             if (bstring[i+1] == ' ')
  55.                i++;                     /* move past trailing space */
  56.             break;
  57.  
  58.           case '/':                     /* slash option */
  59.             if (w > 0)
  60.               movarg();
  61.             line[w++] = '/';           /* all trailing chrs included */
  62.             break;
  63.  
  64.           case '-':                     /* hyphen option */
  65.             if (w == 0)
  66.               line[w++] = '/';
  67.             else
  68.               line[w++] = '-';          /* within arg - pass through */
  69.             break;
  70.  
  71.           case '\0':                    /* end of string */
  72.             if (w > 0)
  73.               movarg();
  74.             break;
  75.  
  76.           default:                      /* nothing in particular */
  77.             line[w++] = tolower(bstring[i]);
  78.        }
  79.      uargc = j;
  80.  
  81. /* This block is included in "demo.exe":
  82. printf("bstring= (%s)\n",bstring);
  83. printf("uargc= %d\n",uargc);
  84. for (i = 0; i < uargc; i++)
  85.   printf("uargv[%d]= (%s)\n",i,uargv[i]);
  86. */
  87. }
  88.  
  89.  
  90. movarg()
  91. {    line[w] = '\0';
  92.      uargv[j] = malloc(strlen(line)+1);
  93.      strcpy(uargv[j++],line);
  94.      w = 0;
  95. }
  96.